Como implementar en React-Native el SDK de Google Navigation.
Código de Ejemplo (Está en Azure Devops se necesita cuenta con permisos)
Pasos:
plugin
plugins { id "com.google.cloud.artifactregistry.gradle-plugin" version "2.1.1"}
Repositorio:
maven {url "artifactregistry://us-west2-maven.pkg.dev/gmp-artifacts/transportation"}
Seccion configuration:
configurations {
implementation {
exclude group: 'com.google.android.gms', module: 'play-services-maps'
}
}
Plugin:
apply plugin: 'com.google.cloud.artifactregistry.gradle-plugin'
Variables:
ext {
androidxLifecycleVersion = "2.4.1"
glideVersion = "4.13.2"
navSdkVersion = "4.2.0"
}
Dependencias:
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
api "com.google.android.maps:navsdk:${navSdkVersion}"
api "androidx.cardview:cardview:1.0.0"
api "androidx.constraintlayout:constraintlayout:2.0.4"
api "androidx.legacy:legacy-support-v4:1.0.0"
api "androidx.lifecycle:lifecycle-common-java8:${androidxLifecycleVersion}"
api "androidx.lifecycle:lifecycle-process:${androidxLifecycleVersion}"
api "androidx.mediarouter:mediarouter:1.3.0"
api "androidx.preference:preference:1.1.1"
api "androidx.recyclerview:recyclerview:1.2.1"
api "androidx.tracing:tracing:1.0.0"
api "com.github.bumptech.glide:glide:${glideVersion}"
api "com.google.android.datatransport:transport-api:3.0.0"
api "com.google.android.datatransport:transport-backend-cct:3.1.4"
api "com.google.android.datatransport:transport-runtime:3.1.4"
api "joda-time:joda-time:2.10.14"
// Also include the Google Places SDK, which is used by this example, but
// isn't required by the Navigation SDK.
api "com.google.android.libraries.places:places:2.5.0"
api 'org.jetbrains.kotlin:kotlin-reflect:1.6.21'
api 'org.jetbrains.kotlin:kotlin-stdlib:1.6.21'
api 'com.google.guava:guava:31.0.1-android'
implementation 'androidx.navigation:navigation-fragment:2.5.1'
implementation 'androidx.navigation:navigation-ui:2.5.1'
annotationProcessor "androidx.annotation:annotation:1.2.0"
annotationProcessor "com.github.bumptech.glide:compiler:${glideVersion}"
<meta-data android:name="com.google.android.geo.API_KEY"
android:value="@string/maps_api_key"/>
<activity
android:name="com.navtest2.NavigationActivity"
android:exported="false"/>
Al intentar compilar el proyecto obtenemos el siguiente error:
An exception occurred applying plugin request [id: 'com.google.cloud.artifactregistry.gradle-plugin', version: '2.1.1']
> Failed to apply plugin 'com.google.cloud.artifactregistry.gradle-plugin'.
> Failed to get access token from gcloud or Application Default Credentials
Este error se produce porque no estámos logueados con gcloud, para poder loguearnos primero tenemos que instalar el google cloud cli:
Una vez termina la instalación se inicia la configuración inicial de gcloud, donde le indicaremos lo siguiente:
NOTA: si no se inicia la configuración de gcloud podemos hacerlo manualmente desde una consola con el comando "gcloud init"
Una vez finalizada la instalación y la configuración inicial de gcloud ya podemos hacer el build de nuestra aplicación.
Al intentar desplegar la aplicación en nuestro dispositivo obtenemos el siguiente error:
com.android.ddmlib.InstallException: Unknown failure: Exception occurred while executing 'install':
android.os.ParcelableException: java.io.IOException: Requested internal only, but not enough space
Este error se produce porque el dispositivo no tienen espacio suficiente para instalar la aplicación, es necesario crear un dispositivo con más almacenamiento.
Este fallo suele ser común al trabajar con React-Native ya que las aplicaciones pesan unos 500MB de base y los emuladores que se crear por defecto no suelen tener un almacenamiento tan grande.
Al intentar ejecutar la aplicación nos encontramos con el siguiente error:
Could not determine the dependencies of task ':app:compileDebugJavaWithJavac'.
> Could not resolve all dependencies for configuration ':app:debugRuntimeClasspath'.
> Not a supported repository protocol 'artifactregistry': valid protocols are [file, http, https, gcs, s3, sftp]
Para solucionar este error tenemos que incluir la siguietne linea en el build.gradle relativo al modulo:
apply plugin: 'com.google.cloud.artifactregistry.gradle-plugin'
Si el plugin que usa el "artifactregistry" está en una librería la linea anterior tiene que ir en el build.gradle de la applicación que está usando dicha librería.
Google Navigation | SDK